

#import "NSMNavSearchBar.h"

/** 搜索状态 */
typedef NS_ENUM(NSInteger, NSMSearchStatus) {
    NSMSearchStatusHome = 0,    //!< 搜索主页
    NSMSearchStatusAssociate,   //!< 搜索联想
    NSMSearchStatusResult,      //!< 搜索结果
};

@protocol NSMSearchHomeProtocol <NSObject>
/**
 选中了推荐或者选中了历史记录都调用这个
 如果主页接口推荐的数据类型是dic,标题字段需为"title"
 !!!重写set方法可用于特殊场景 eg:菲度客户端的vip地址搜索.选中即确定并返回
 */
@property (nonatomic, copy) void(^didSelectSearchItem)(id obj);
/** 插入一条历史搜索记录,目前只记录文字 */
- (void)insertLocal:(id)obj;
@end

@protocol NSMSearchAssociateProtocol <NSObject>
@property (nonatomic, copy) NSString *associateURL;
/**
 选中联想记录调用
 !!!重写set方法可用于特殊场景 eg:菲度客户端的vip地址搜索.选中即确定并返回
 */
@property (nonatomic, copy) void(^didSelectAssociateItem)(id obj);
/** 自定义联想扩展 */
- (void)associateWithKeywords:(NSString *)keywords;
@end

@protocol NSMSearchResultProtocol <NSObject>
/**
 选中结果后回调,内部会通知NSMSearchHomeProtocol调用insertLocal:
 !!!重写set方法将以重写方法实现为主
 */
@property (nonatomic, copy) void(^didSelectResultItem)(id obj);
/**
 在这里进行业务搜索
 obj来源
 1.主页控制器的推荐(类型不确定dic|string) 或 历史记录(string)
 2.联想控制器的联想(string)
 3.searchBar的搜索按钮(string)
 */
- (void)searchWithObject:(id)obj;
@end

@interface NSMSearchController : NSMViewController
/** 搜索框 */
@property (nonatomic, strong, readonly) NSMNavSearchBar *searchBar;
/** 取消按钮 */
@property (nonatomic, strong, readonly) NSMButton *cancelBtn;
/**
 影响搜索控制器取消时候是pop还是dismiss
 YES:push模式 NO:present模式
 */
@property (nonatomic) BOOL isPushed;
/**
 是否忽略搜索框键盘上"搜索"按钮事件,默认NO
 YES:什么也不干,比如城市筛选点了联想界面的搜索搜索还是当前
 NO:切换至搜索结果控制器
 */
@property (nonatomic) BOOL ignoreSearchBtnAction;

/**
 搜索根控制器
 请自行处理控制器内的本地缓存(增、删、改、查)
 eg:历史记录的获取、删除(单条/全部)、新增
 */
@property (nonatomic, strong) UIViewController<NSMSearchHomeProtocol> *homeController;
/** 搜索联想控制器 */
@property (nonatomic, strong) UIViewController<NSMSearchAssociateProtocol> *associateController;
/** 搜索结果控制器 */
@property (nonatomic, strong) UIViewController<NSMSearchResultProtocol> *resultController;
@end

